package com.SpringAOP.test_1_31_springaop.dynamicProxy;

import java.lang.reflect.Proxy;

public class Main {
    public static void main(String[] args) {
        // JDK的动态代理的实现
        // 就是在运行的时候创建一个代理类

        // 目标对象
        HouseSubject subject = new RealHouseSubject();
        // 还是先生成一个代理
        HouseSubject proxy = (HouseSubject) Proxy.newProxyInstance(
                subject.getClass().getClassLoader(),
                new Class[]{HouseSubject.class},
                new JDKInvocation(subject));   // 通过这个方法来动态 生成代理

        // Proxy 类中使⽤频率最⾼的⽅法是： newProxyInstance() , 这个⽅法主要⽤来⽣成⼀个代理对象
        // 这个⽅法⼀共有 3 个参数：
        //Loader: 类加载器, ⽤于加载代理对象.
        //interfaces : 被代理类实现的⼀些接⼝(这个参数的定义, 也决定了JDK动态代理只能代理实现了接⼝的
        //⼀些类)
        //h : 实现了 InvocationHandler 接⼝的对象

        proxy.saleHouse();
        proxy.rentHouse();

        // JDK 动态代理 只能代理接口 不能代理类
    }
}
